home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / ms_dos / txf / src / txfex_s.c < prev    next >
C/C++ Source or Header  |  1993-07-08  |  3KB  |  142 lines

  1. /***************
  2. *
  3. * g:\exe\txf\src\txfex_s.c
  4. */
  5. #include "txf.h"
  6.  
  7. /********************old_exchange()***************************/
  8.  
  9. void old_exchange(char *st1,char *st2, char *oldfile, char *newfile)
  10. {                /* old→new    */
  11.     FILE *tmpin, *tmpout;
  12.     int i = 0, clum = 0, knj = 0;
  13.     int oldlen = strlen(st1), newlen = 0, chr = NUL;
  14.     int chrattr = CT_ANK;
  15.     char *old = NULL, *oldattr, *new = NULL;
  16.  
  17.     old = ftrans(st1);
  18.     oldlen = strlen(old);
  19.     oldattr = malloc(oldlen + 1);
  20.     if (oldattr == NULL) {
  21.         errexit("cannot use enough memory(oldattr)");
  22.     }
  23.     for (i = 0; *(old + i) != NUL; i++) {
  24.         chrattr = chkctype(*(old + i), chrattr);
  25.         *(oldattr + i) = chrattr;
  26.         }
  27.     if (st2 != NULL) {
  28.         new = ftrans(st2);
  29.     }
  30.     if (new != NULL) {
  31.         newlen = strlen(new);
  32.     }
  33.     if (*inputfile != NUL) {
  34.         tmpin = fopen(oldfile,"rb");
  35.     }
  36.     else {
  37.         tmpin = stdin;
  38.     }
  39.     tmpout = fopen(newfile, "wb");
  40.     if (viewmode > 2) {
  41.         fprintf(stderr, "Info:readfile=%s,(%d)/writefile=%s,(%d)\n",
  42.             oldfile, tmpin, newfile, tmpout);
  43.     }
  44.     if ((tmpin == NULL) || (tmpout == NULL)) {
  45.         errexit("cannot open TMP/input file(exchange-S)\n");
  46.         }
  47.  
  48.     if (viewmode > 1) fprintf(stderr, "'%s'→'%s'\n", old, new);
  49.  
  50.     i = 0;
  51.     chrattr = CT_ANK;
  52.     while (chr != EOF) {
  53.         while (i < oldlen) {
  54.             chr = getc(tmpin);
  55.             if (chr == RET) {
  56.                 clum = 0;
  57.                 quote = 0;
  58.             }
  59.             else {
  60.                 clum++;
  61.             }
  62.             if (knj > 0) {
  63.                 if (clum == 2 && jstrchr(kq, chr| knj<<8) != NULL) {
  64.                     quote = 1;
  65.                 }
  66.             }
  67.             else {
  68.                 if ((clum == 1) && (jstrchr(kq, (chr & 0x0ff)) != NULL)) {
  69.                     quote = 1;
  70.                 }
  71.             }
  72.             chrattr = chkctype(chr, chrattr);
  73.             if (chrattr == CT_KJ1) {
  74.                 knj = chr;
  75.             }
  76.             else {
  77.                 knj = 0;
  78.             }
  79.             if ((chr == *(old + i)) && (chrattr == *(oldattr + i)) &&
  80.                     !(quote & quoteflg)) {
  81.                 i++;
  82.             }
  83.             else {
  84.                 if (i > 0) {
  85.                     fwrite(old, 1, i, tmpout);
  86.                     i = 0;
  87.                 }
  88.                 if ((i == 0) && (chr != EOF)) {
  89.                     putc(chr,tmpout);
  90.                 }
  91.             }
  92.             if (chr == EOF) break;
  93.         }
  94.         if (i >= oldlen) {
  95.             if (newlen > 0) {
  96.                 fwrite(new, 1, newlen, tmpout);
  97.             }
  98.         }
  99.         else {
  100.             fwrite(old, 1, i, tmpout);
  101.         }
  102.         i = 0;
  103.     }
  104.  
  105.     fclose(tmpin);
  106.     fclose(tmpout);
  107.     free(new);
  108.     free(old);
  109.     free(oldattr);
  110.     if (new != NULL) {
  111.         free(new);
  112.     }
  113. }
  114.  
  115. void old_exchangedriver()
  116. {
  117.     int i;
  118.     char *tmpinname, *tmpoutname;
  119.  
  120.     tmpinname = ((tmpinfile == -1) ? inputfile : tfile[tmpinfile]);
  121.     tmpoutname = tfile[((tmpinfile > 0) ? 0 : 1)];
  122.     if (viewmode > 0) {
  123.         fprintf(stderr, "TXF Tiny exchange module.(Series) Ver1.01\n");
  124.     }
  125.  
  126.     if (exold[0] != NULL) {
  127.         old_exchange(exold[0], exnew[0], tmpinname, tmpoutname);
  128.     }
  129.     tmpinfile = ((tmpinfile > 0) ? 0 : 1);
  130.     tmpinname = tfile[tmpinfile];
  131.     tmpoutname = tfile[1 - tmpinfile];
  132.     for (i = 1; i < exflg; i++) {
  133.         old_exchange(exold[i], exnew[i], tmpinname, tmpoutname);
  134.         tmpinfile = 1 - tmpinfile;
  135.         tmpinname = tfile[tmpinfile];
  136.         tmpoutname = tfile[1 - tmpinfile];
  137.     }
  138.  
  139. }
  140.  
  141. /****************end of old_exchange()************************/
  142.